home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / c / vgagraph.zip / MOUSE.C < prev    next >
C/C++ Source or Header  |  1993-04-17  |  6KB  |  243 lines

  1. #include <dos.h>;
  2. #include <mem.h>;
  3. #include "allproc.h"
  4.  
  5.  
  6. extern unsigned int BytesPerLine,MaxX,MaxY;
  7. void interrupt ( *oldvec)(void);
  8.  
  9. int x0,y0,xs0,ys0;
  10. char INIT,STOP,ColorMouse;
  11. unsigned int hi,lo;
  12.  
  13. char mousekey()
  14. {
  15. unsigned int w;
  16.  
  17.      if (INIT==1) return(0);
  18.       asm{
  19.       mov   ax,3
  20.       int   33h
  21.       }
  22.       return(_BX);
  23. }
  24. void MouseXY(int *X,int *Y)
  25. {
  26.     asm{
  27.       mov   ax,0Bh
  28.       int   33h
  29.       }
  30.       *X=_CX;
  31.       *Y=_DX;
  32. }
  33. void MouseSave()
  34. {
  35. unsigned int i,ofsp,ofsp1,x,l;
  36.  
  37.          x=x0 >> 3;
  38.          l=3;
  39.          if (peekb(0,0x0449)!=0x13) outport(0x03CE,0x0105);
  40.             else
  41.             {
  42.             x=x0 >> 2;
  43.             l=5;
  44.             outport(0x03CE,0x0008);
  45.             outport(0x03C4,0x0f02);
  46.             }
  47.           ofsp=y0*BytesPerLine+x;
  48.          ofsp1=0xFFFF-88;
  49.         for (i=0;i<=16;i++)
  50.          {
  51.          move(0xA000,ofsp,0xA000,ofsp1,l);
  52.          ofsp+=BytesPerLine;
  53.          ofsp1+=l;
  54.          }
  55.         if (peekb(0,0x0449)!=0x13) outport(0x03CE,0x0005);
  56.            else outport(0x03CE,0xff08);
  57. }
  58. void MouseRead()
  59. {
  60. unsigned int i,ofsp,ofsp1,x,l;
  61.  
  62.          x=x0 >> 3;
  63.          l=3;
  64.          if (peekb(0,0x0449)!=0x13) outport(0x03CE,0x0105);
  65.             else
  66.             {
  67.             l=5;
  68.             x=x0 >> 2;
  69.             outport(0x03CE,0x0008);
  70.             outport(0x03C4,0x0f02);
  71.             }
  72.          ofsp=y0*BytesPerLine+x;
  73.          ofsp1=0xFFFF-88;
  74.         for (i=0;i<=16;i++)
  75.          {
  76.          move(0xA000,ofsp1,0xA000,ofsp,l);
  77.          ofsp+=BytesPerLine;
  78.          ofsp1+=l;
  79.          }
  80.          if (peekb(0,0x0449)!=0x13) outport(0x03CE,0x0005);
  81.             else outport(0x03CE,0xff08);
  82. }
  83. void pixel(int x,int y,int col)
  84. {
  85.    if (!((x>MaxX) || (y>MaxY))) putpixel(x,y,col);
  86. }
  87. void MouseShow(char col)
  88. {
  89.  
  90.          pixel(x0,y0,0);pixel(x0+1,y0,0);
  91.          pixel(x0,y0+1,0);pixel(x0+1,y0+1,col);
  92.          pixel(x0+2,y0+1,col);pixel(x0+3,y0+1,0);
  93.          pixel(x0+1,y0+2,0);pixel(x0+2,y0+2,col);
  94.          pixel(x0+3,y0+2,col);pixel(x0+4,y0+2,col);
  95.          pixel(x0+5,y0+2,0);
  96.          pixel(x0+1,y0+3,0);pixel(x0+2,y0+3,col);
  97.          pixel(x0+3,y0+3,col);pixel(x0+4,y0+3,col);
  98.          pixel(x0+5,y0+3,col);pixel(x0+6,y0+3,col);
  99.          pixel(x0+7,y0+3,0);
  100.          pixel(x0+2,y0+4,0);pixel(x0+3,y0+4,col);
  101.          pixel(x0+4,y0+4,col);pixel(x0+5,y0+4,col);
  102.          pixel(x0+6,y0+4,col);pixel(x0+7,y0+4,col);
  103.          pixel(x0+8,y0+4,col);pixel(x0+9,y0+4,0);
  104.          pixel(x0+2,y0+5,0);pixel(x0+3,y0+5,col);
  105.          pixel(x0+4,y0+5,col);pixel(x0+5,y0+5,col);
  106.          pixel(x0+6,y0+5,col);pixel(x0+7,y0+5,col);
  107.          pixel(x0+8,y0+5,col);pixel(x0+9,y0+5,col);
  108.          pixel(x0+10,y0+5,col);pixel(x0+11,y0+5,col);
  109.          pixel(x0+12,y0+5,0);
  110.          pixel(x0+2,y0+6,0);pixel(x0+3,y0+6,col);
  111.          pixel(x0+4,y0+6,col);pixel(x0+5,y0+6,col);
  112.          pixel(x0+6,y0+6,col);pixel(x0+7,y0+6,col);
  113.          pixel(x0+8,y0+6,col);pixel(x0+9,y0+6,col);
  114.          pixel(x0+10,y0+6,col);pixel(x0+11,y0+6,col);
  115.          pixel(x0+12,y0+6,col);pixel(x0+13,y0+6,col);
  116.          pixel(x0+14,y0+6,0);
  117.          pixel(x0+3,y0+7,0);pixel(x0+4,y0+7,col);
  118.          pixel(x0+5,y0+7,col);pixel(x0+6,y0+7,col);
  119.          pixel(x0+7,y0+7,col);pixel(x0+8,y0+7,col);
  120.          pixel(x0+9,y0+7,col);pixel(x0+10,y0+7,col);
  121.          pixel(x0+11,y0+7,col);pixel(x0+12,y0+7,col);
  122.          pixel(x0+13,y0+7,0);
  123.          pixel(x0+3,y0+8,0);pixel(x0+4,y0+8,col);
  124.          pixel(x0+5,y0+8,col);pixel(x0+6,y0+8,col);
  125.          pixel(x0+7,y0+8,col);pixel(x0+8,y0+8,col);
  126.          pixel(x0+9,y0+8,col);pixel(x0+10,y0+8,col);
  127.          pixel(x0+11,y0+8,col);pixel(x0+12,y0+8,0);
  128.          pixel(x0+3,y0+9,0);pixel(x0+4,y0+9,col);
  129.          pixel(x0+5,y0+9,col);pixel(x0+6,y0+9,col);
  130.          pixel(x0+7,y0+9,col);pixel(x0+8,y0+9,col);
  131.          pixel(x0+9,y0+9,col);pixel(x0+10,y0+9,col);
  132.          pixel(x0+11,y0+9,0);
  133.          pixel(x0+4,y0+10,0);pixel(x0+5,y0+10,col);
  134.          pixel(x0+6,y0+10,col);pixel(x0+7,y0+10,col);
  135.          pixel(x0+8,y0+10,col);pixel(x0+9,y0+10,col);
  136.          pixel(x0+10,y0+10,col);pixel(x0+11,y0+10,col);
  137.          pixel(x0+12,y0+10,0);
  138.          pixel(x0+4,y0+11,0);pixel(x0+5,y0+11,col);
  139.          pixel(x0+6,y0+11,col);pixel(x0+7,y0+11,col);
  140.          pixel(x0+8,y0+11,col);pixel(x0+9,y0+11,col);
  141.          pixel(x0+10,y0+11,col);pixel(x0+11,y0+11,col);
  142.          pixel(x0+12,y0+11,col);pixel(x0+13,y0+11,0);
  143.          pixel(x0+4,y0+12,0);pixel(x0+5,y0+12,col);
  144.          pixel(x0+6,y0+12,col);pixel(x0+7,y0+12,0);pixel(x0+8,y0+12,0);
  145.          pixel(x0+9,y0+12,0);pixel(x0+10,y0+12,col);
  146.          pixel(x0+11,y0+12,col);pixel(x0+12,y0+12,col);
  147.          pixel(x0+13,y0+12,col);pixel(x0+14,y0+12,0);
  148.          pixel(x0+5,y0+13,0);pixel(x0+6,y0+13,0);
  149.          pixel(x0+10,y0+13,0);pixel(x0+11,y0+13,col);
  150.          pixel(x0+12,y0+13,col);pixel(x0+13,y0+13,col);
  151.          pixel(x0+14,y0+13,0);
  152.          pixel(x0+5,y0+14,0);pixel(x0+11,y0+14,0);
  153.          pixel(x0+12,y0+14,0);pixel(x0+13,y0+14,0);
  154.          pixel(x0+12,y0+14,0);
  155. }
  156. void interrupt draw(void)
  157. {
  158.  
  159.     if (STOP==0)
  160.     {
  161.  
  162.     MouseXY(&xs0,&ys0);
  163.     xs0=x0+xs0;
  164.     ys0=y0+ys0;
  165.  
  166.     if (xs0<0) xs0=0;
  167.     if (xs0>MaxX) xs0=MaxX;
  168.     if (ys0<0) ys0=0;
  169.     if (ys0>MaxY) ys0=MaxY;
  170.     MouseRead();
  171.     x0=xs0;y0=ys0;
  172.     MouseSave();
  173.     MouseShow(ColorMouse);
  174.  
  175.     }
  176. }
  177. void TMP()
  178. {
  179. long l;
  180.     l=(long)draw;
  181.     asm{
  182.     pushf
  183.     push cs
  184.     call l
  185.     }
  186. }
  187. void SetMouse(unsigned int w,unsigned int seg,unsigned int ofs)
  188. {
  189. unsigned int w1;
  190.     w1=seg;
  191.     asm{
  192.     mov ax,00Ch
  193.     mov cx,w
  194.     mov es,w1
  195.     mov dx,ofs
  196.     int 33h
  197.     }
  198. }
  199. void MouseStop()
  200. {
  201.       if (INIT==0)
  202.       {
  203.       STOP=1;
  204.       MouseRead();
  205.       }
  206. }
  207. void MouseStart()
  208. {
  209.       if (INIT==0)
  210.       {
  211.       MouseSave();
  212.       MouseShow(ColorMouse);
  213.       STOP=0;
  214.       }
  215. }
  216. char initmouse(int x00,int y00,int col)
  217. {
  218.  
  219.     INIT=1;
  220.     asm{
  221.     mov ax,0
  222.     int 33h
  223.     }
  224.     if (_AX==0) return(1);
  225.     setvect(0x1F,draw);
  226.     hi=(long)TMP >> 16;
  227.     lo=(long)TMP - (hi << 16);
  228.     SetMouse(1,hi,lo);
  229.     xs0=x00;ys0=y00;
  230.     x0=xs0;y0=ys0;
  231.     STOP=0;
  232.     ColorMouse=col;
  233.     MouseSave();
  234.     MouseShow(ColorMouse);
  235.     INIT=0;
  236.     return(0);
  237. }
  238. void closemouse()
  239. {
  240.       MouseRead();
  241.       SetMouse(0,hi,lo);
  242. }
  243.